package com.agencia.logica;


import java.sql.SQLException;
import java.util.Date;

import com.agencia.connection.DataSocketAnular;
import com.agencia.connection.DataSocketBuscar;
import com.agencia.connection.DataSocketVenta;
import com.agencia.dominio.Anulado;
import com.agencia.dominio.Venta;
import com.agencia.persistencia.PersistenciaImp;
import com.imm.logicaProxy.DataAnulado;
import com.imm.logicaProxy.DataVenta;
import com.imm.logicaProxy.IAdminIMMFacadeService;

public class AdminVentaImp implements IAdminVenta {

	//@WebServiceRef(IAdminIMMFacadeService.class)
	//private IAdminIMMFacade immFacade;
	
	private AdminVentaImp() {
		
	}

	
	private static AdminVentaImp instancia = new AdminVentaImp();  
	 
	public static AdminVentaImp getInstance() {  
		
		  return instancia;  
		 }  



	public DataSocketVenta ingresarVenta(Venta venta) throws SQLException {		
		DataSocketVenta dataSocketVenta = new DataSocketVenta();
		
	
		IAdminIMMFacadeService immFacade = new IAdminIMMFacadeService();
		DataVenta retorno = immFacade.getIAdminIMMFacadePort().ingresarVenta(venta2DataVenta(venta));
	
		dataSocketVenta.setError(retorno.getError());
		
		if(retorno.getError() == 0){
			venta.setFechaVenta(new Date(retorno.getFechaVenta()));
			venta.setId_imm(retorno.getId());
			venta.setImporte(retorno.getImporte());
			
			venta = PersistenciaImp.getInstance().altaVentaBD(venta);
		}
		
		dataSocketVenta.setFechaInicio(venta.getFechaInicio());
		dataSocketVenta.setFechaVenta(venta.getFechaVenta());
		dataSocketVenta.setId_terminal(venta.getId_terminal());
		dataSocketVenta.setIdImm(venta.getId_imm());
		dataSocketVenta.setImporte(venta.getImporte());
		dataSocketVenta.setMatricula(venta.getMatricula());
		dataSocketVenta.setMinutos(venta.getMinutos());
		
		return dataSocketVenta;
}


    public DataSocketAnular anularVenta(DataSocketAnular dataVenta) throws SQLException {
        
        Venta venta = new Venta();
        Anulado anulado = new Anulado();
        Integer id_Agencia = null;
        IAdminIMMFacadeService immFacade = new IAdminIMMFacadeService();
        venta = PersistenciaImp.getInstance().buscarVenta(dataVenta.getIdImm());
        id_Agencia = PersistenciaImp.getInstance().obtenerAgencia();

        if(verificarVentaAnulada(venta)){
        	DataAnulado retorno = immFacade.getIAdminIMMFacadePort().anularVenta(venta.getId_imm(),id_Agencia);
        	
            anulado.setFecha(new Date(retorno.getFecha()));
            anulado.setId(retorno.getIdAnuladoIMM());
            anulado.setId_venta(venta.getId());
            System.out.println(anulado.getId());
            System.out.println(retorno.getError());
            if (retorno.getError()==0){
	            anulado = PersistenciaImp.getInstance().anularVentaBD(venta, anulado);
	            dataVenta.setIdAnulado(anulado.getId());
            }

        }
        
        return dataVenta;
	}


	public Boolean verificarDatosVentas(Venta venta) throws SQLException {
		return PersistenciaImp.getInstance().verificarDatosVentas(venta);
	}

	
	public Boolean verificarVentaAnulada(Venta venta) throws SQLException {
		if(PersistenciaImp.getInstance().verificarDatosVentas(venta)){
			if(PersistenciaImp.getInstance().verificarVentaAnulada(venta)){
				return false;
			}
			return true;
		}else{
			return false;
		}
	}
		
	
	private DataVenta venta2DataVenta (Venta v){
		DataVenta a = new DataVenta();
			a.setFechaInicio(v.getFechaInicio().getTime());
		    a.setFechaVenta(v.getFechaVenta().getTime());	
	    	a.setError(0);//va sin errores	
			a.setId(0);//va sin id de ticket
			a.setIdAgencia(1);// setear el id de Agencia segun corresponda
			a.setImporte(v.getImporte());
			a.setMatricula(v.getMatricula());
			a.setMinutos(v.getMinutos());
		
		return a;
	}

	public DataSocketBuscar buscarDataVenta(DataSocketBuscar buscarVenta) throws SQLException {
		
		return PersistenciaImp.getInstance().buscarDataVenta(buscarVenta.getIdImm());
	}

	public Venta buscarVenta(Integer Id_Ticket_IMM) throws SQLException {
		// TODO Auto-generated method stub
		return PersistenciaImp.getInstance().buscarVenta(Id_Ticket_IMM);
	}

}
